package sistemaEnemigo;

import escenario.Escenario;
import escenario.IdPosEnemigo;
import escenario.Misil;

public class MisilEnemigo extends Misil {
	
	private IdPosEnemigo PE = new IdPosEnemigo();
	private boolean alive = true;
	
	public MisilEnemigo(Escenario es){
		this.setEscenario(es);
		es.addMisilEnemigo(this);
	}

	public IdPosEnemigo getPE() {
		return PE;
	}

	public void addPosAbs(){
		PE.setId(this.getId());
		PE.setME(this);
		PE.setX(this.getXAbs());
		PE.setY(this.getYAbs());
		PE.setZ(this.getPosicion().getZ());
		this.getEscenario().addPosEnemigo(PE);
	}
	
	public void setPosAbs(){
		PE.setX(this.getXAbs());
		PE.setY(this.getYAbs());
		PE.setZ(this.getPosicion().getZ());		
		this.getEscenario().setPosEnemigo(PE);
	}
	
	public void mover(){
		this.getPosicion().setRadio(this.getPosicion().getRadio() - 1);
		this.setPosAbs();
	}
	
	private double radioTrayectoria(){
		double a, b, c, alfa=this.getPosicion().getTita();
		a=this.getPosicion().getRadio();
		b=this.getDestino().getRadio();
		c=Math.sqrt(a * a + b * b - 2 * a * b * Math.cos((Math.PI / 2) - alfa));
		return c;
	}
	
	private double titaTrayectoria(double rN){
		double radioNuevo, titaViejo, radioDestino, beta, alfa;
		radioNuevo=rN;
		titaViejo=this.getPosicion().getTita();
		radioDestino=this.getDestino().getRadio();
		beta=Math.asin(radioDestino * (Math.sin((Math.PI / 2) - titaViejo)) / radioNuevo);
		alfa = Math.PI - ((Math.PI / 2) - titaViejo) - beta;
		alfa=alfa - (Math.PI / 2);
		
		return alfa;
		
	}
	
	private void cambiarEje(){
		double radioNuevo=this.radioTrayectoria();
		double titaNuevo=this.titaTrayectoria(radioNuevo);
		this.getPosicion().setTita(titaNuevo);
		this.getPosicion().setRadio(radioNuevo);
	}
	
	public void colision(){
		System.out.println("IMPACTE #" + this.getId());
		this.getEscenario().removePosEnemigo(this.getPE());
		this.getEscenario().removeMisilEnemigo(this);
		alive = false;
	}
	
	public void run(){
		System.out.println("Se ejecuto el misil enemigo: " + this.getId());
		this.setPuntoImpacto();
		this.cambiarEje();

		while(this.getPosicion().getRadio() > 0 && alive){
/*			System.out.println("@ID: " + this.getId() + "     " + this.printPosRel() + "     " + this.printPosAbs() + 
					"      " + this.getEscenario().getPosEnemigo(this.getId())); */
			this.mover();
			try {
				Thread.sleep(400);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		}
	}	
}